package com.petdog.module.admin.service;

import com.petdog.infrastructure.entity.AdminOperationLog;
import com.petdog.infrastructure.entity.BreedInfo;
import com.petdog.module.admin.dto.AdminDashboardDto;
import com.petdog.module.admin.dto.AdminUserManageDto;
import com.petdog.module.admin.dto.ContentReviewDto;
import com.petdog.module.admin.dto.OperationLogQueryRequest;
import com.petdog.common.dto.PageResult;

import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 管理员服务接口
 */
public interface AdminService {

    /**
     * 获取管理员数据看板
     */
    AdminDashboardDto getDashboardData();

    /**
     * 获取指定时间范围内的管理员数据看板
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param indicators 指标类型（可选，默认返回全部指标）
     * @return 数据看板DTO
     */
    AdminDashboardDto getDashboardDataByTimeRange(LocalDate startDate, LocalDate endDate, String indicators);

    /**
     * 导出数据看板数据为Excel
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param dataType 导出类型（user, content, community, all）
     * @param response HTTP响应对象
     */
    void exportDashboardData(LocalDate startDate, LocalDate endDate, String dataType, HttpServletResponse response);

    /**
     * 获取用户列表（带分页和筛选）
     */
    PageResult<AdminUserManageDto> getUserList(Integer pageNum, Integer pageSize, String username, String email, Integer status);

    /**
     * 修改用户状态
     */
    boolean updateUserStatus(Long userId, Integer status);

    /**
     * 重置用户密码
     */
    boolean resetUserPassword(Long userId);

    /**
     * 获取需要审核的内容列表
     */
    PageResult<ContentReviewDto> getContentReviewList(Integer pageNum, Integer pageSize, String contentType, Integer status);

    /**
     * 审核内容
     */
    boolean reviewContent(Long contentId, String contentType, Integer status, String reviewNote);

    /**
     * 获取操作日志列表
     */
    PageResult<AdminOperationLog> getOperationLogList(OperationLogQueryRequest request);

    /**
     * 保存管理员操作日志
     */
    void saveOperationLog(AdminOperationLog log);
    
    /**
     * 导出操作日志为CSV文件
     * @param request 查询请求参数
     * @param response HTTP响应对象
     */
    void exportOperationLogsToCSV(OperationLogQueryRequest request, HttpServletResponse response);
    
    /**
     * 编辑内容文本
     */
    boolean editContent(Long contentId, String contentType, String editedContent);
    
    /**
     * 删除内容（支持单条或批量）
     */
    boolean deleteContent(List<Long> contentIds, String contentType, String deleteReason);
    
    // 以下是品种知识库维护相关方法

    /**
     * 获取品种列表（支持分页、搜索、筛选）
     */
    PageResult<BreedInfo> getBreedList(Integer pageNum, Integer pageSize, String keyword, String sizeCategory);

    /**
     * 创建新品种
     */
    boolean createBreed(BreedInfo breedInfo, List<MultipartFile> images);

    /**
     * 更新品种信息
     */
    boolean updateBreed(Integer breedId, BreedInfo breedInfo, List<MultipartFile> images);

    /**
     * 删除品种
     */
    boolean deleteBreed(Integer breedId);

    /**
     * 批量导入品种（从CSV文件）
     */
    Map<String, Object> batchImportBreeds(MultipartFile csvFile);

    /**
     * 检查品种名称是否已存在
     */
    boolean checkBreedNameExists(String breedName, Integer excludeId);

    /**
     * 获取所有体型分类选项
     */
    List<String> getSizeCategories();
}
